bd1dc9cd5dcf71459f9ce1d093e68c664899a47c,htroot/Threaddump_p.java,Threaddump_p,respond,#httpRequestHeader#serverObjects#serverSwitch#,54
Before Change
sb = (plasmaSwitchboard) env;
final StringBuffer buffer = new StringBuffer(1000);
if (post != null && post.containsKey("createThreaddump")) {
final boolean plain = post.get("plain", "false").equals("true");
final int sleep = post.getInt("sleep", 0); // a sleep before creation of a thread dump can be used for profiling
if (sleep > 0) try {Thread.sleep(sleep);} catch (final InterruptedException e) {}
prop.put("dump", "1");
// Thread dump
final Map<Thread,StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
final Date dt = new Date();
final String versionstring = yacyVersion.combined2prettyVersion(sb.getConfig("version","0.1"));
bufferappend(buffer, plain, "************* Start Thread Dump " + dt + " *******************");
bufferappend(buffer, plain, "");
bufferappend(buffer, plain, "YaCy Version: " + versionstring);
bufferappend(buffer, plain, "Total Memory = " + (Runtime.getRuntime().totalMemory()));
bufferappend(buffer, plain, "Used Memory = " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
bufferappend(buffer, plain, "Free Memory = " + (Runtime.getRuntime().freeMemory()));
bufferappend(buffer, plain, "");
bufferappend(buffer, plain, "");
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.BLOCKED);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.RUNNABLE);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TIMED_WAITING);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.WAITING);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.NEW);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TERMINATED);
bufferappend(buffer, plain, "************* End Thread Dump " + dt + " *******************");
After Change
bufferappend(buffer, plain, "");
bufferappend(buffer, plain, "");
if (post != null && post.containsKey("multipleThreaddump")) {
final ArrayList<Map<Thread,StackTraceElement[]>> traces = new ArrayList<Map<Thread,StackTraceElement[]>>();
for (int i = 0; i < 100; i++) {
traces.add(Thread.getAllStackTraces());
}
appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.BLOCKED);
appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.RUNNABLE);
appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.TIMED_WAITING);
appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.WAITING);
appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.NEW);
appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.TERMINATED);
} else {
// generate a single thread dump
final Map<Thread,StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.BLOCKED);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.RUNNABLE);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TIMED_WAITING);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.WAITING);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.NEW);
appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TERMINATED);
}
bufferappend(buffer, plain, "************* End Thread Dump " + dt + " *******************");